package ar.edu.caece.pl.asin.model.impl;

import ar.edu.caece.pl.alex.model.IToken;
import ar.edu.caece.pl.asin.manager.IAnalizadorSintactico;
import ar.edu.caece.pl.asin.manager.impl.AbstractAnalizadorSintactico;
import ar.edu.caece.pl.asin.model.ITokenStream;

public class C1 extends AbstractAnalizadorSintactico implements IAnalizadorSintactico {
	
	/* INICIALIZACION */	
	public C1 ( ITokenStream ts ) {
		super(ts, false);
	}
	public C1 ( ITokenStream ts, boolean debugMode ) {
		super(ts,debugMode);
	}

	
	/** 
	 * Devuelve true si reconoce un operador de comparacion
	 */
	public boolean reconocer () {

		boolean recognized = true; //(asumimos correctitud hasta demostrar lo contrario)

		//----------------------------------------------
		//Agrego info de debug de la produccion
		em.debug( "Reconocer Comparador:");		//TODO pasarlo a accion semantica
		//----------------------------------------------
		
		/* <C'> -> = | >= | <= | < | > | <> */
		if ( primeros(this.getTokenSiguiente() ) ) {
			
			//----------------------------------------------
			//Agrego info de debug de la produccion
			em.debug( "<C'> -> "+this.getTokenSiguiente().getTokenText(), this.getTokenSiguiente()); //TODO pasarlo a accion semantica
			//----------------------------------------------
			
			this.reconocerToken(this.getTokenSiguiente().getType());
		}
		
		return recognized;
	}
	
	public static boolean primeros(IToken token) {
		return  token.getType() == IToken.TYPE_OPER_IGUAL ||
				token.getType() == IToken.TYPE_OPER_MAYOR_IGUAL ||
				token.getType() == IToken.TYPE_OPER_MENOR_IGUAL ||
				token.getType() == IToken.TYPE_OPER_MAYOR ||
				token.getType() == IToken.TYPE_OPER_MENOR ||
				token.getType() == IToken.TYPE_OPER_DISTINTO;
	}
		
}
